﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades.Sistema;
using Entidades.Sistema.Venta;


namespace Mapping.Sistema.Venta
{
    public static class MappingProductos
    {
        public static List<Producto> ConsultarProductos()
        {
            SqlCommand cmdProductos = new SqlCommand();
            cmdProductos.CommandText = "sp_ConsultarProductos";
            cmdProductos.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdProductos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            SqlDataReader drProductos = cmdProductos.ExecuteReader();

            List<Producto> ColProductos = new List<Producto>();

            while (drProductos.Read())
            {
                Producto oProducto = new Producto();
                oProducto.IdProducto = Convert.ToInt32(drProductos["Id_ProductoProd"]);
                oProducto.Estado = drProductos["EstadoProd"].ToString();
                oProducto.Descripcion = drProductos["DescripcionProd"].ToString();
                oProducto.Nombre = drProductos["NombreProd"].ToString();
                oProducto.PrecioLista = Convert.ToDecimal(drProductos["PrecioListaProd"]);
                oProducto.DiasVencimiento = Convert.ToInt32(drProductos["DiasVencimientoProd"]);
                oProducto.CantidadPorUnidadProd = Convert.ToInt32(drProductos["CantidadPorUnidadProd"]);
                oProducto.CantidadPorTurno = Convert.ToInt32(drProductos["CantidadPorTurno"]);
                oProducto.Alicuota = Convert.ToDecimal(drProductos["Alicuota"]);
                oProducto.PesoNeto = Convert.ToDecimal(drProductos["PesoNeto"]);
                oProducto.TipoProducto.IdTipoProducto = Convert.ToInt32(drProductos["Id_TipoProductoTProd"]);
                oProducto.TipoProducto.Estado = drProductos["EstadoTProd"].ToString();
                oProducto.TipoProducto.Descripcion = drProductos["DescripcionTProd"].ToString();
                oProducto.TipoProducto.Nombre = drProductos["NombreTProd"].ToString();
                oProducto.Unidad.IdUnidadMedida = Convert.ToInt32(drProductos["Id_UnidadMedidaUnid"]);
                oProducto.Unidad.Descripcion = drProductos["DescripcionUnid"].ToString();
                oProducto.Unidad.Nombre = drProductos["NombreUnid"].ToString();

                ColProductos.Add(oProducto);
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return ColProductos;
        }

        public static Producto ConsultarProductoPorClave(int IdProducto)
        {
            SqlCommand cmdProductos = new SqlCommand();
            cmdProductos.CommandText = "sp_ConsultarProductoLeerPorClave";
            cmdProductos.CommandType = System.Data.CommandType.StoredProcedure;
            cmdProductos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdProductos.Parameters.Add("@IdProducto", System.Data.SqlDbType.Int).Value = IdProducto;
            SqlDataReader drProductos = cmdProductos.ExecuteReader();

            Producto oProducto = new Producto();

            while (drProductos.Read())
            {                
                oProducto.IdProducto = Convert.ToInt32(drProductos["Id_ProductoProd"]);
                oProducto.Estado = drProductos["EstadoProd"].ToString();
                oProducto.Descripcion = drProductos["DescripcionProd"].ToString();
                oProducto.Nombre = drProductos["NombreProd"].ToString();
                oProducto.PrecioLista = Convert.ToDecimal(drProductos["PrecioListaProd"]);
                oProducto.DiasVencimiento = Convert.ToInt32(drProductos["DiasVencimientoProd"]);
                oProducto.CantidadPorUnidadProd = Convert.ToInt32(drProductos["CantidadPorUnidadProd"]);
                oProducto.CantidadPorTurno = Convert.ToInt32(drProductos["CantidadPorTurno"]);
                oProducto.Alicuota = Convert.ToDecimal(drProductos["Alicuota"]);
                oProducto.PesoNeto = Convert.ToDecimal(drProductos["PesoNeto"]);
                oProducto.TipoProducto.IdTipoProducto = Convert.ToInt32(drProductos["Id_TipoProductoTProd"]);
                oProducto.TipoProducto.Estado = drProductos["EstadoTProd"].ToString();
                oProducto.TipoProducto.Descripcion = drProductos["DescripcionTProd"].ToString();
                oProducto.TipoProducto.Nombre = drProductos["NombreTProd"].ToString();
                oProducto.Unidad.IdUnidadMedida = Convert.ToInt32(drProductos["Id_UnidadMedidaUnid"]);
                oProducto.Unidad.Descripcion = drProductos["DescripcionUnid"].ToString();
                oProducto.Unidad.Nombre = drProductos["NombreUnid"].ToString();                
            }
            

            return oProducto;
        }

        public static bool AgregarProducto(Producto oProducto)
        {
            SqlCommand cmdProducto = new SqlCommand();
            cmdProducto.CommandText = "sp_AgregarProducto";
            cmdProducto.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdProducto.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdProducto.Parameters.Add("@Id_Producto", System.Data.SqlDbType.Int).Value = oProducto.IdProducto;
            cmdProducto.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar, 50).Value = "Activo";
            cmdProducto.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 50).Value = oProducto.Descripcion;
            cmdProducto.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oProducto.Nombre;
            cmdProducto.Parameters.Add("@PrecioLista", System.Data.SqlDbType.Float).Value = oProducto.PrecioLista;
            cmdProducto.Parameters.Add("@DiasVencimiento", System.Data.SqlDbType.Int).Value = oProducto.DiasVencimiento;
            cmdProducto.Parameters.Add("@CantidadPorUnidad", System.Data.SqlDbType.Int).Value = oProducto.CantidadPorUnidadProd;
            cmdProducto.Parameters.Add("@CantidadPorTurno", System.Data.SqlDbType.Int).Value = oProducto.CantidadPorTurno;
            cmdProducto.Parameters.Add("@Id_TipoProducto", System.Data.SqlDbType.Int).Value = oProducto.TipoProducto.IdTipoProducto;
            cmdProducto.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oProducto.Unidad.IdUnidadMedida;
            cmdProducto.Parameters.Add("@Alicuota", System.Data.SqlDbType.Float).Value = oProducto.Alicuota;
            cmdProducto.Parameters.Add("@PesoNeto", System.Data.SqlDbType.Float).Value = oProducto.PesoNeto;
            cmdProducto.Parameters.Add("@NombreUsuario", System.Data.SqlDbType.VarChar, 15).Value = "lucas.farruggia";
            cmdProducto.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }

        public static int Contar()
        {
            try {
            SqlCommand cmdProducto = new SqlCommand();
            cmdProducto.CommandText = "sp_ContarProducto";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdProducto.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdProducto.CommandType = System.Data.CommandType.StoredProcedure;
            int nro = Convert.ToInt32(cmdProducto.ExecuteScalar());

            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return nro + 1;
                }

            catch
            {
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return  1;
            }
        }


        public static int ModificarProducto(Producto oProducto)
        {
            SqlCommand cmdProducto = new SqlCommand();
            cmdProducto.CommandText = "sp_ModificarProducto";
            cmdProducto.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdProducto.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdProducto.Parameters.Add("@Id_Producto", System.Data.SqlDbType.Int).Value = oProducto.IdProducto;
            cmdProducto.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar, 50).Value = "Activo";
            cmdProducto.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 50).Value = oProducto.Descripcion;
            cmdProducto.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oProducto.Nombre;
            cmdProducto.Parameters.Add("@PrecioLista", System.Data.SqlDbType.Float).Value = oProducto.PrecioLista;
            cmdProducto.Parameters.Add("@DiasVencimiento", System.Data.SqlDbType.Int).Value = oProducto.DiasVencimiento;
            cmdProducto.Parameters.Add("@CantidadPorUnidad", System.Data.SqlDbType.Int).Value = oProducto.CantidadPorUnidadProd;
            cmdProducto.Parameters.Add("@CantidadPorTurno", System.Data.SqlDbType.Int).Value = oProducto.CantidadPorTurno;
            cmdProducto.Parameters.Add("@Id_TipoProducto", System.Data.SqlDbType.Int).Value = oProducto.TipoProducto.IdTipoProducto;
            cmdProducto.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oProducto.Unidad.IdUnidadMedida;
            cmdProducto.Parameters.Add("@Alicuota", System.Data.SqlDbType.Float).Value = oProducto.Alicuota;
            cmdProducto.Parameters.Add("@PesoNeto", System.Data.SqlDbType.Float).Value = oProducto.PesoNeto;
            cmdProducto.Parameters.Add("@NombreUsuario", System.Data.SqlDbType.VarChar, 15).Value = "lucas.farruggia";
            cmdProducto.ExecuteNonQuery();
            //int nro = Convert.ToInt32(cmdProducto.ExecuteScalar());
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            return 1;
        }

        public static bool EliminarProducto(Producto oProducto)
        {


            SqlCommand cmdEliminarProducto = new SqlCommand();
            cmdEliminarProducto.CommandText = "sp_EliminarProducto";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarProducto.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarProducto.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarProducto.Parameters.Add("@Id_Producto", System.Data.SqlDbType.Int).Value = oProducto.IdProducto;
            cmdEliminarProducto.Parameters.Add("@NombreUsuario", System.Data.SqlDbType.VarChar, 15).Value = "lucas.farruggia";
            cmdEliminarProducto.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");


            SqlCommand cmdEliminarProductoFisica = new SqlCommand();
            cmdEliminarProductoFisica.CommandText = "sp_EliminarProductoFisica";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarProductoFisica.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarProductoFisica.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarProductoFisica.Parameters.Add("@Id_Producto", System.Data.SqlDbType.Int).Value = oProducto.IdProducto;
            cmdEliminarProductoFisica.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            return true;
        }
    }
}
